一句話總結: 資料結構是我們如「何存放資料的方式」,演算法是我們「處理資料的方法」。
哭阿~這是甚麼玄學 ? 請你們準備好一杯咖啡邊喝邊聽我娓娓道來。
資料結構,我把它全名翻作「存放資料的結構」,以生活中的例子來說就是,杯架、衣櫃、鞋櫃這種東西,說真的你說可以把杯子放在衣架上嗎? 還真的可以,可以把衣服塞在杯架上嗎? 還真的可以。
但是可以歸可以,這樣是對的用途嗎 ?是不是會讓我的空間浪費,而且不同的器材他的拿取方式也不一樣,這樣是不是會破壞掉這個器材原本設計的意義。
以上例子來說,我們可以想像一個流程
不同的物品存放會有不同的需求,不同的需求會創造出不同的器材,不同的器材不同存放、拿取、使用的方式,沒有最好,只有你的需求用甚麼來做最適合 。
資料結構大家最最最熟悉的莫過於Array了,Array就是一種很經典的資料結構。
另外在實作上,資料結構很多時候時候並不是一個實體一對一的關係,更多的是他想表達的抽象概念。
有些資料結構,會用其他的資料結構來實現,譬如Stack跟Queue可以用Link List來實作,然而Stack跟Queue跟Link List他本身都是一種資料結構。
當然也有些資料結構他會有多種的實作方式,譬如 Tree 可以用Node(val, left, right)利用指標的方式來實作,也可以用Array的方式 以index當作Node編號的方式來實作。
所以當我們在學習資料結構的時候,要更注重在他的「概念」上而非實作上,因為不同語言會有不同的實作方式,但概念都是一樣的。
如果現在還看不懂其實也沒關係,只要先稍微有一點概念,等到我們後面篇幅說完,再回頭看,就會比較有感覺了。
演算法,聽起來很可怕,但其實廣義來說,我們日常生活中都會用到這個概念。
試想你有沒有當過這種機車人,當今天大家要一起做一件事,然後你的小明同學就提出了他的方法,結果聰明的你就直接嘴人家說:「你很笨耶,不就這樣做就好了嘛!!更簡單還更快速。」如果你有以上的經驗,那恭喜你,其實你已經有廣義的演算法概念了。
演算法就是解決一個問題的方法,其實就這麼簡單。這在軟體界當中是比較公正的方式去驗證這個方法是好還是不好。
最後,我們用公式化的方法來表示演算法,就是「輸入+演算法 = 輸出」,其實我認為在初學階段,我們先知道這些就好,當然演算法在學術上有更精確的定義,但是我認為剛開始學習的時候,能用越簡單的方式去理解他越好,往後讀者們如果有興趣,就可以自行去搜尋關於演算法更精確的定義呦。
今天我們粗略的介紹了甚麼是演算法跟資料結構,其實這些概念有時候不僅僅侷限在程式設計裡面,有時也能夠在日常生活中體現,只是我們自己並沒有自覺而已。好了!今天的文章就到這邊,明天我們用漸進式的方式來跟大家介紹大家很害怕的主題「時間複雜度」。